# =============================================================================================================
# =============================================================================================================

# step 1: 修改机器基本信息 hosts
vi /etc/hosts

# 配置内容如下
# 2 master, or 2n
192.168.3.51   CNT7XCEPHD01
192.168.3.52   CNT7XCEPHD02
# 3 monitor, or 2n + 1
192.168.3.53   CNT7XCEPHD03
192.168.3.54   CNT7XCEPHD04
192.168.3.55   CNT7XCEPHD05
# 3 osd , or 2n + 1
192.168.3.56   CNT7XCEPHD06
192.168.3.57   CNT7XCEPHD07
192.168.3.58   CNT7XCEPHD08
# 2 mds , or 2n
192.168.3.59   CNT7XCEPHD09
192.168.3.60   CNT7XCEPHD10


# =============================================================================================================
# =============================================================================================================

# step 2: 安装系统依赖软件
# 修改yum为国内镜像 === 看具体情况，有时候国内镜像不一定完整，这个时候还是要切换回国外地址
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak && \
wget -O /etc/yum.repos.d/CentOS-Base.repo -L http://mirrors.aliyun.com/repo/Centos-7.repo

yum clean all && \
yum makecache

# 清理掉无用的repo
yum --enablerepo=base clean metadata

# =============================================================================================================
# =============================================================================================================
# 
# 参考教程：https://docs.ceph.com/en/latest/install/index_manual/#install-manual
# Step 1: Get Packages == 安装系统依赖软件
#         https://docs.ceph.com/en/latest/install/get-packages/  

# Step 2: Get Tarballs == 获得发行版，release版本源代码
#         https://docs.ceph.com/en/latest/install/get-tarballs/
#         https://download.ceph.com/tarballs/                     （全部release版本-源代码）
#         https://download.ceph.com/tarballs/ceph-15.2.8.tar.gz   （最新稳定生产版本-源代码）

# Step 3: Clone Source == 下载代码，通过git命令下载源代码
#         https://docs.ceph.com/en/latest/install/clone-source/

# Step 4: Build Ceph == 构建Ceph
#         https://docs.ceph.com/en/latest/install/build-ceph/

# resource : Ceph Mirrors == ceph 软件包的镜像
#         https://docs.ceph.com/en/latest/install/mirrors/

# resource : Ceph Mirrors == ceph 的docker容器
#         https://docs.ceph.com/en/latest/install/containers/ 

# =============================================================

# 其他方法：源代码构建ceph
# https://blog.csdn.net/smart9527_zc/article/details/84894749

#         
# =============================================================================================================
# =============================================================================================================

# step 3: Get Packages == 安装系统依赖软件

# 中文参考：http://docs.ceph.org.cn/install/get-packages/
# 英文参考：https://docs.ceph.com/en/latest/install/get-packages/

# ============================================================================================================= 

# 1. 安装 CEPH 密钥

# 安装 release.asc 密钥
rpm --import 'https://download.ceph.com/keys/release.asc'
# 或替换为镜像地址：eu.ceph.com
# rpm --import 'https://eu.ceph.com/keys/release.asc'
# 或替换为镜像地址：mirrors.aliyun.com
# rpm --import 'https://mirrors.aliyun.com/ceph/keys/release.asc'


# 安装 autobuild.asc 密钥 （仅对 QA 和开发者）
rpm --import 'https://download.ceph.com/keys/autobuild.asc'
# 或替换为镜像地址：eu.ceph.com
# rpm --import 'https://eu.ceph.com/keys/autobuild.asc'
# 或替换为镜像地址：mirrors.aliyun.com
# rpm --import 'https://mirrors.aliyun.com/ceph/keys/autobuild.asc'

# ============================================================================================================= 

# 2. 添加 CEPH repo
 
# 下载cephadm脚本文件
mkdir -p /opt/soft/ceph
wget -O /opt/soft/ceph/cephadm  -L https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
chmod +x /opt/soft/ceph/cephadm

# 替换cephadm脚本文件中的下载地址，为国内镜像
# 文件路径 = /opt/soft/ceph/cephadm
# 手动替换：download.ceph.com ，替换为mirrors.aliyun.com/ceph 或 官方中国镜像 mirrors.ustc.edu.cn/ceph。
# (或者替换为其他ceph的mirror地址，参考上面连接：resource : Ceph Mirrors)


# 配置ceph代码分支的release名称，比如tag v15.2.0对应的release=15.2.0. 
# 另外，目前没有 tag v17.0.0 对应的release=17.0.0, 所以不要写17.0.0
# 必须安装依赖包，才能执行cephadm命令
yum install -y python3
yum install -y epel-release
/opt/soft/ceph/cephadm add-repo --release 15.2.8
# 或者使用tag标签版本， TODO: 稍后实践
# /opt/soft/ceph/cephadm add-repo --version 17.0.0
# 或者使用开发分支, TODO: 稍后实践
# /opt/soft/ceph/cephadm add-repo --dev 17.0.0


# 查看上面cephamd安装分支后，产生的repo文件，如下
cat /etc/yum.repos.d/ceph.repo
# 内容输出如下，查看，begin
[root@CNT7XCEPHD10 /]# cat /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.8/el7/$basearch
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

[Ceph-noarch]
name=Ceph noarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.8/el7/noarch
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

[Ceph-source]
name=Ceph SRPMS
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.8/el7/SRPMS
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc


# 内容输出如下，查看，end

# ============================================================================================================= 

# 3. 安装适当的依赖库  

# part 1: 首先安装docker

# 首先要安装依赖类库：容器组件 podman 或 docker，否则执行下面命令，会提示错误：Unable to locate any of ['podman', 'docker']
# step 1: 安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2

# Step 2: 添加软件源信息
#（备注：这里由于镜像是国外的，所以会下载速度很慢，如下图: 最下面显示下载速度：475 B/S; 建议修改repo地址为国内镜像地址）
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3.1 将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
# 官方软件源默认启用了最新的软件，您可以通过编辑软件源的方式获取各个版本的软件包。
# 例如官方并没有将测试版本的软件源置为可用，你可以通过以下方式开启。同理可以开启各种测试版本等。
# vi /etc/yum.repos.d/docker-ee.repo (备注docker-ee是企业收费版，docker-ce是社区免费版)
cat /etc/yum.repos.d/docker-ce.repo

# Step 3.2: 先更新yum索引
yum makecache fast

# Step 3.3 安装指定版本的Docker-CE: 查找全部Docker-CE的版本: 如下图：
yum list docker-ce.x86_64 --showduplicates | sort -r

# step 3.4 安装指定版本的Docker-CE: 安装指定Docker-CE的版本:[VERSION]来自上面4.2查询的Vesion清单
# yum -y install docker-ce-[VERSION]
# yum install docker-ce-17.12.1.ce-1.el7.centos
# 或安装更新版本，如下：
yum install docker-ce-18.06.3.ce-3.el7

# Step 3.5 配置docker为系统服务
# 添加docker用户组
groupadd docker
# 把当前用户root加到docker用户组中
gpasswd -a root docker
# 重启docker后台服务
service docker restart
# 设置docker为开机启动
chkconfig docker on
# 检查docker是否启动后台服务正常
ps -ef | grep docker
systemctl status -l docker

# Step 3.6 配置docker服务使用中国官方镜像加速
# Docker 中国官方镜像加速可通过registry.docker-cn.com访问。该镜像库只包含流行的公有镜像，私有镜像仍需要从美国镜像库中拉取。
# docker 加速镜像，如下：
# https://vzlqchi3.mirror.aliyuncs.com
# https://registry.docker-cn.com
# https://docker.mirrors.ustc.edu.cn
cat > /etc/docker/daemon.json <<EOF
{
    "registry-mirrors": ["https://vzlqchi3.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn"],
    "max-concurrent-downloads": 20,
    "live-restore": true,
    "max-concurrent-uploads": 10,
    "debug": true,
    "data-root": "/k8s/docker/data",
    "exec-root": "/k8s/docker/exec",
    "log-opts": {
     "max-size": "10m",
     "max-file": "5"
    }
}
EOF

# Step 3.7 测试docker 运行
# 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/kevin_docker_registry/docker_base_alpine:3.11.2
# 查看本地镜像
docker images
# 启动镜像
docker run registry.cn-hangzhou.aliyuncs.com/kevin_docker_registry/docker_base_alpine:3.11.2 
# 查看docker运行的容器
docker ps
# 查看docker 磁盘使用
docker system df


# part 2: 然后安装ceph 依赖库，如下：

#  安装适当的依赖库，此命令依赖docker环境
/opt/soft/ceph/cephadm install ceph-common

# Ceph requires the following packages:
# 参考：https://docs.ceph.com/en/latest/install/get-packages/
/opt/soft/ceph/cephadm install snappy
/opt/soft/ceph/cephadm install leveldb
/opt/soft/ceph/cephadm install gdisk

# 如果下面命令安装找不到，则使用指定远程安装包RPM方式安装
/opt/soft/ceph/cephadm install python-argparse
# yum install -y http://www.rpmfind.net/linux/mageia/distrib/6/x86_64/media/core/release/python-argparse-1.2.1-12.mga6.noarch.rpm (对应python 2)
# yum install -y http://www.rpmfind.net/linux/openmandriva/cooker/repository/riscv64/main/release/python-argparse-1.4.0-2-omv4002.noarch.rpm  (对应python 3)

/opt/soft/ceph/cephadm install dnf
/opt/soft/ceph/cephadm install gcc
/opt/soft/ceph/cephadm install git
/opt/soft/ceph/cephadm install virtualenv
/opt/soft/ceph/cephadm install pip


# =============================================================================================================
# =============================================================================================================

# step 4: build ceph == 通过源代码构建ceph

# 参考文档：https://docs.ceph.com/en/latest/install/build-ceph/  （英文官方文档）
# 参考文档：http://docs.ceph.org.cn/install/build-ceph/          （中文官方文档）
# 参考文档：https://blog.csdn.net/smart9527_zc/article/details/84894749          （第三方文档）

# 4.1 下载和上传ceph源代码到构建服务器

# git 方式下载源代码

mkdir -p /opt/code/ceph/
git clone https://gitee.com/tiandong19860806/ceph.git
git branch dev_master
git checkout dev_master
git pull origin master
# 授予源代码目录执行权限
chmod -R 777 /opt/code/ceph/ 

# ====================================================================

# [测试：build不成功]
# tar.gz 方式下载源代码
# 上传ceph 源代码到上面创建的软件目录 /opt/code/

mkdir -p /opt/code/ceph/
wget -L https://download.ceph.com/tarballs/ceph-15.2.8.tar.gz -O /opt/code/ceph-15.2.8.tar.gz
wget -L https://download.ceph.com/tarballs/ceph-15.2.8.tar.gz -O /opt/code/ceph-15.2.8.tar.gz
# 解压源代码到目录 /opt/code/ceph
tar -zxvf /opt/code/ceph-15.2.8.tar.gz -C /opt/code/ceph/
mv /opt/code/ceph/ceph-15.2.8 /opt/code/ceph/
# 授予源代码目录执行权限
chmod -R 777 /opt/code/ceph

# ====================================================================

# [测试：build不成功]
# 上传ceph 源代码到上面创建的软件目录 /opt/code/
# zip 方式下载源代码
mkdir -p /opt/code/
# 解压源代码到目录 /opt/code/ceph
unzip -o /opt/code/ceph.zip -d /opt/code/ceph/
# 授予源代码目录执行权限
chmod -R 777 /opt/code/ceph/ 

# ====================================================================

# 4.2 构建前准备环境 
# 进入源代码根目录
cd /opt/code/ceph
ls -al ./install-deps.sh

# 1.执行脚本，安装构建环境的依赖包
cd /opt/code/ceph
./install-deps.sh
./make-debs.sh


# 检查make脚本的环境依赖
cd /opt/code/ceph
./run-make-check.sh

# 2.执行脚本，执行构建编译源代码
# 首先打开./do_cmake.sh脚本文件，注释里面关于git的三行代码，如下：（原因，我们这里ceph源代码，不是通过git命令下载的，是手动上传的）
# TODO / TODO
cd /opt/code/ceph
./do_cmake.sh

# 执行构建
cd /opt/code/ceph/build
make

# 执行安装
cd /opt/code/ceph/build
make install


# =============================================================================================================
# =============================================================================================================

# step 5: 通过源代码构建ceph



# =============================================================================================================
# =============================================================================================================

# step 3: 创建ceph安装目录

# 创建ceph的安装主目录
mkdir -p /app/ceph && \
# 创建ceph的数据主目录
mkdir -p /data/ceph && \
# 创建ceph的日志主目录
mkdir -p /log/ceph

# =============================================================================================================
# =============================================================================================================